home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / array / vbarray.frm < prev    next >
Text File  |  1995-09-06  |  10KB  |  373 lines

  1. VERSION 2.00
  2. Begin Form VBArray 
  3.    BorderStyle     =   1  'Fixed Single
  4.    Caption         =   "VB Array"
  5.    ClientHeight    =   3225
  6.    ClientLeft      =   1305
  7.    ClientTop       =   1500
  8.    ClientWidth     =   6330
  9.    Height          =   3630
  10.    Left            =   1245
  11.    LinkMode        =   1  'Source
  12.    LinkTopic       =   "Form1"
  13.    MaxButton       =   0   'False
  14.    ScaleHeight     =   3225
  15.    ScaleWidth      =   6330
  16.    Top             =   1155
  17.    Width           =   6450
  18.    Begin CommandButton OkCancel 
  19.       Cancel          =   -1  'True
  20.       Caption         =   "&Quit"
  21.       Height          =   420
  22.       Index           =   1
  23.       Left            =   3600
  24.       TabIndex        =   5
  25.       Top             =   2280
  26.       Width           =   1095
  27.    End
  28.    Begin CommandButton OkCancel 
  29.       Caption         =   "&OK"
  30.       Default         =   -1  'True
  31.       Height          =   420
  32.       Index           =   0
  33.       Left            =   1920
  34.       TabIndex        =   4
  35.       Top             =   2280
  36.       Width           =   1095
  37.    End
  38.    Begin OptionButton OtherDemo 
  39.       Caption         =   "&Some Type Array"
  40.       Height          =   255
  41.       Left            =   4200
  42.       TabIndex        =   3
  43.       Top             =   1800
  44.       Width           =   1815
  45.    End
  46.    Begin OptionButton LngIntDemo 
  47.       Caption         =   "&Long Integer Array"
  48.       Height          =   255
  49.       Left            =   2040
  50.       TabIndex        =   2
  51.       Top             =   1800
  52.       Width           =   1935
  53.    End
  54.    Begin OptionButton IntDemo 
  55.       Caption         =   "&Integer Array"
  56.       Height          =   255
  57.       Left            =   360
  58.       TabIndex        =   1
  59.       Top             =   1800
  60.       Value           =   -1  'True
  61.       Width           =   1455
  62.    End
  63.    Begin ListBox ListBox 
  64.       Height          =   1200
  65.       Left            =   360
  66.       TabIndex        =   0
  67.       Top             =   360
  68.       Width           =   5655
  69.    End
  70.    Begin Label Status 
  71.       Alignment       =   2  'Center
  72.       BorderStyle     =   1  'Fixed Single
  73.       Caption         =   "Status"
  74.       Height          =   255
  75.       Left            =   -120
  76.       TabIndex        =   6
  77.       Top             =   3000
  78.       Width           =   6615
  79.    End
  80. End
  81. DefInt A-Z
  82.  
  83. ' VBARRAY *FAST* file I/O of arrays
  84. ' Address questions/comments/improvements to
  85. ' Costas Kitsos, CIS ID: 73667,1755
  86. ' Enjoy!
  87.  
  88.  
  89. ' holds a Windows supplied temp filename for the demo
  90.  
  91. Dim sTempFile As String
  92.  
  93.  
  94. ' listbox's hWnd so we can set tabs
  95.  
  96. Dim hWndListBox As Integer
  97.  
  98.  
  99. ' Flag for Application Initialization
  100.  
  101. Dim nInitApp As Integer
  102.  
  103. Function DoIntDemo () As Integer
  104.      
  105.      ' Declare variables
  106.  
  107.      Dim tTempFile As OFSTRUCT     ' Used by OpenFile function
  108.  
  109.      ReDim nBefore(50) As Integer  ' holds the Integers before I/O
  110.      ReDim nAfter(50) As Integer   ' holds the Integers after I/O
  111.      
  112.      Dim nBytes, hFileOut, hFileIn, nIObytes, nFclose ' Integers
  113.      Dim lMes As Long, lFileSize As Long
  114.  
  115.      ' Use the Random number generator to fill nBefore() with 50 integers
  116.  
  117.      Randomize
  118.      For j = 1 To 50
  119.         nBefore(j) = Int((32767 - 1 + 1) * Rnd + 1)
  120.      Next
  121.          
  122.  
  123.     ' ** I/O Starts here
  124.     ' Create our temp file and open it for writing
  125.  
  126.     hFileOut = OpenFile(sTempFile, tTempFile, OF_CREATE Or OF_WRITE)
  127.     
  128.     ' If we have a file handle proceed
  129.  
  130.     If hFileOut <> 0 Then
  131.  
  132.     ' calculate the number of bytes to be written (NumberOfElements * Size)
  133.     ' Since we want to write the entire array the formula would be:
  134.     ' nBytes = UBound(Array) * Len(Array(element)).  If we only needed
  135.     ' twenty elements then nBytes = 20 * Len(Array(element)).  Since we're
  136.     ' dealing with fixed length arrays, element can be any legitimate
  137.     ' array element.
  138.  
  139.         nBytes = UBound(nBefore) * Len(nBefore(1))
  140.           
  141.     ' Write nBefore() to disk using API's lwrite function.
  142.     ' We only need to pass the first array element.  The nBytes
  143.     ' parameter tells Windows how many bytes to write, or as far
  144.     ' as we're concerned how many array elements.
  145.  
  146.         nIObytes = lwrite(hFileOut, nBefore(1), nBytes)
  147.  
  148.     ' Get the file size with llseek.  By specifying 0 for lOffset and
  149.     ' and 2 for iOrigin we're saying seek position 0 from the end of
  150.     ' the file.  In other words, give us the FileSize.
  151.  
  152.         lFileSize = llseek(hFileOut, 0, 2)
  153.  
  154.     ' close the output file.
  155.  
  156.         nFclose = lclose(hFileOut)
  157.  
  158.  
  159.     ' Now let's see if it worked.  Open the file for reading.
  160.  
  161.         hFileIn = OpenFile(sTempFile, tTempFile, OF_READ)
  162.  
  163.     ' We'll use the nAfter() array this time, nBytes is the same.
  164.  
  165.         nIObytes = lread(hFileIn, nAfter(1), nBytes)
  166.  
  167.     ' close the input file.
  168.  
  169.         nFclose = lclose(hFileIn)
  170.  
  171.     ' Let's prove that it worked.  First, clear the list box.
  172.         
  173.         lMes = SendMessage(hWndListBox, LB_RESETCONTENT, 0, ByVal 0&)
  174.  
  175.     ' Add a title.
  176.  
  177.         ListBox.AddItem "Before" + Chr$(9) + "After"
  178.  
  179.     ' Add the nBefore() and nAfter() contents to the listbox
  180.  
  181.         For j = 1 To 50
  182.         ListBox.AddItem LTrim$(Str$(nBefore(j))) + Chr$(9) + LTrim$(Str$(nAfter(j)))
  183.         Next
  184.         
  185.         Status.Caption = "Temp File: " + sTempFile + Str$(lFileSize) + " bytes"
  186.  
  187.         DoIntDemo = True    ' success
  188.     
  189.     Else
  190.  
  191.     DoIntDemo = False       ' failure
  192.  
  193.     End If
  194.  
  195. End Function
  196.  
  197. Function DoLngIntDemo () As Integer
  198.      
  199.        ' Please see the DoIntDemo function for comments
  200.  
  201.     Dim tTempFile As OFSTRUCT
  202.  
  203.     ReDim lBefore(50) As Long
  204.     ReDim lAfter(50) As Long
  205.      
  206.     Dim nBytes, hFileOut, hFileIn, nIObytes, nFclose
  207.     Dim lMes As Long, lFileSize As Long
  208.  
  209.     Randomize
  210.     For j = 1 To 50
  211.        lBefore(j) = Int(1234532767 * Rnd + 1)
  212.     Next
  213.  
  214.     hFileOut = OpenFile(sTempFile, tTempFile, OF_CREATE Or OF_WRITE)
  215.     
  216.     If hFileOut <> 0 Then
  217.  
  218.         nBytes = UBound(lBefore) * Len(lBefore(1))
  219.         nIObytes = lwrite(hFileOut, lBefore(1), nBytes)
  220.         lFileSize = llseek(hFileOut, 0, 2)
  221.         nFclose = lclose(hFileOut)
  222.                
  223.         hFileIn = OpenFile(sTempFile, tTempFile, OF_READ)
  224.         nIObytes = lread(hFileIn, lAfter(1), nBytes)
  225.         nFclose = lclose(hFileIn)
  226.  
  227.         lMes = SendMessage(hWndListBox, LB_RESETCONTENT, 0, ByVal 0&)
  228.  
  229.         ListBox.AddItem "Before" + Chr$(9) + "After"
  230.  
  231.         For j = 1 To 50
  232.         ListBox.AddItem LTrim$(Str$(lBefore(j))) + Chr$(9) + LTrim$(Str$(lAfter(j)))
  233.         Next
  234.  
  235.         Status.Caption = "Temp File: " + sTempFile + Str$(lFileSize) + " bytes"
  236.         
  237.         DoLngIntDemo = True
  238.     
  239.     Else
  240.  
  241.     DoLngIntDemo = False
  242.  
  243.     End If
  244.  
  245.  
  246.  
  247. End Function
  248.  
  249. Function DoOtherDemo () As Integer
  250.      
  251.      ' Please see the DoIntDemo function for comments
  252.  
  253.     Dim tTempFile As OFSTRUCT
  254.  
  255.     ReDim tBefore(50) As SomeType
  256.     ReDim tAfter(50) As SomeType
  257.      
  258.     Dim nBytes, hFileOut, hFileIn, nIObytes, nFclose
  259.     Dim lMes As Long, lFileSize As Long
  260.  
  261.     Randomize
  262.     For j = 1 To 50
  263.         tBefore(j).nInteger = Int((32767 - 1 + 1) * Rnd + 1)
  264.         tBefore(j).sString = Chr$(Int((90 - 65 + 1) * Rnd + 65)) + "abcde"
  265.         tBefore(j).lLong = Int(1232767 * Rnd + 1)
  266.     Next
  267.  
  268.     hFileOut = OpenFile(sTempFile, tTempFile, OF_CREATE Or OF_WRITE)
  269.     
  270.     If hFileOut <> 0 Then
  271.  
  272.         nBytes = UBound(tBefore) * Len(tBefore(1))
  273.         nIObytes = lwrite(hFileOut, tBefore(1), nBytes)
  274.         lFileSize = llseek(hFileOut, 0, 2)
  275.         nFclose = lclose(hFileOut)
  276.          
  277.         hFileIn = OpenFile(sTempFile, tTempFile, OF_READ)
  278.         nIObytes = lread(hFileIn, tAfter(1), nBytes)
  279.         nFclose = lclose(hFileIn)
  280.  
  281.         lMes = SendMessage(hWndListBox, LB_RESETCONTENT, 0, ByVal 0&)
  282.  
  283.         ListBox.AddItem "Before" + Chr$(9) + "After"
  284.  
  285.         For j = 1 To 50
  286.         Before$ = LTrim$(Str$(tBefore(j).nInteger)) + " " + tBefore(j).sString + Str$(tBefore(j).lLong)
  287.         After$ = LTrim$(Str$(tAfter(j).nInteger)) + " " + tAfter(j).sString + Str$(tAfter(j).lLong)
  288.         ListBox.AddItem Before$ + Chr$(9) + After$
  289.         Next
  290.  
  291.         Status.Caption = "Temp File: " + sTempFile + Str$(lFileSize) + " bytes"
  292.  
  293.         DoOtherDemo = True
  294.     
  295.     Else
  296.  
  297.     DoOtherDemo = False
  298.  
  299.     End If
  300.  
  301. End Function
  302.  
  303. Sub Form_Load ()
  304.  
  305.     sTempFile = String$(144, 0)  ' Buffer
  306.     
  307.     ' Ask Windows for a temp file